package com.skh.array;

/**
 * 车的可用捕获量
 */
public class NumRookCaptures {
    /**
     * 在一个 8 x 8 的棋盘上，有一个白色车（rook）。也可能有空方块，白色的象（bishop）和黑色的卒（pawn）。
     * 它们分别以字符 “R”，“.”，“B” 和 “p” 给出。大写字符表示白棋，小写字符表示黑棋。
     * <p>
     * 车按国际象棋中的规则移动：它选择四个基本方向中的一个（北，东，西和南），
     * 然后朝那个方向移动，直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。
     * 另外，车不能与其他友方（白色）象进入同一个方格。
     * <p>
     * 返回车能够在一次移动中捕获到的卒的数量。
     *
     * @return
     */


    public int numRookCaptures(char[][] board) {
        //1.找到白色的车
        //2.分别向4个方向移动,如果遇到卒或者遇到象或者到达边缘就结束循环,如果遇到卒就数量加1
        //3.向上移动:横坐标--,纵坐标不变
        //4.向下移动:横坐标++,纵坐标不变
        //5.向左移动:横坐标不变,纵坐标--
        //6.向右移动:横坐标不变,纵坐标++

        int count = 0;
        int heng = 0, zhong = 0;
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                if (board[i][j] == 'R') {
                    heng = i;
                    zhong = j;
                }
            }
        }

        //向上移动
        for (int i = heng; i >=0 ; i--) {
            if (board[i][zhong] == 'p') {
                count++;
                break;
            }
            if (board[i][zhong] == 'B') {
                break;
            }
        }


        //向下移动
        for (int i = heng; i <8 ; i++) {
            if (board[i][zhong] == 'p') {
                count++;
                break;
            }
            if (board[i][zhong] == 'B') {
                break;
            }
        }

        //向左移动
        for (int i = zhong; i>=0 ; i--) {
            if (board[heng][i] == 'p') {
                count++;
                break;
            }
            if (board[heng][i] == 'B') {
                break;
            }
        }

        //向右移动
        for (int i = zhong; i<8 ; i++) {
            if (board[heng][i] == 'p') {
                count++;
                break;
            }
            if (board[heng][i] == 'B') {
                break;
            }
        }


        return count;
    }

    public static void main(String[] args) {

    }
}
